package leetcode;

/**
 * 86. 分隔链表
 * 给你一个链表的头节点 head 和一个特定值 x ，请你对链表进行分隔，使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
 *
 * 你应当 保留 两个分区中每个节点的初始相对位置。
 *
 *
 *
 * 示例 1：
 *
 *
 * 输入：head = [1,4,3,2,5,2], x = 3
 * 输出：[1,2,2,4,3,5]
 * 示例 2：
 *
 * 输入：head = [2,1], x = 2
 * 输出：[1,2]
 *
 */
public class Partition {

    public ListNode partition(ListNode head, int x) {
        if (head == null){
            return head;
        }
        ListNode left = new ListNode();
        ListNode right = new ListNode();
        ListNode right1 = right;
        ListNode left1 = left;
        ListNode cur = head;
        while (cur != null){
            if (cur.val < x){
                left1.next = cur;
                left1 = left1.next;
            }else {
                right1.next = cur;
                right1 = right1.next;
            }
            cur = cur.next;
        }
        right1.next = null;
        left1.next = right.next;
        return left.next;
    }


    public static class ListNode{
        private int val;
        private ListNode next;
    }
}
